package edu.ec.tesis.prototiporecomendador.ngc.UserProfile;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class UserDataFileReader {

    /**
     * Devuelve un ArrayList de objetos <code>Movie</code>(s) con todas las
     * lineas leidas del fichero <code>file</code>.
     *
     * @param file Ruta absoluta del fichero con los registros de las peliculas
     * @return El ArrayList de <code>Movie</code>'s leídas del <code>file</code>
     * @throws IOException si el fichero <code>file</code> no existe
     * @see ArrayList
     * @see BufferedReader
     * @see FileReader
     * @see Movie
     */
    @SuppressWarnings("ConvertToTryWithResources")
    public static ArrayList<String> readLines(String file) {
        ArrayList<String> result = new ArrayList<String>();
        String linea;
        try {

            FileReader fr = new FileReader(file);
            BufferedReader bf = new BufferedReader(fr);

            while ((linea = bf.readLine()) != null) {
                result.add(linea);
            }
            bf.close();

        } catch (IOException e) {
            System.out.println("LectorDatos.ReadLines() Error: " + e.getMessage());
        }
        return result;
    }

    /**
     * Devuelve un ArrayList de objetos <code>Calificacion</code>(s) con todas
     * las lineas leidas del fichero <code>file</code>.
     *
     * @param file Ruta absoluta del fichero con los registros de las películas
     * @return El ArrayList de <code>Calificacion</code>'s leídas del
     * <code>file</code>
     * @throws IOException si el fichero <code>file</code> no existe
     * @see ArrayList
     * @see BufferedReader
     * @see FileReader
     * @see Movie
     */
    public static ArrayList<ArrayList<Calificacion>> RatingsReadLines(String file) {

        String linea;
        int idUser;
        int idMovie;
        int rating;
        String campos[];
        int puntero = 1;
        ArrayList<ArrayList<Calificacion>> ratings = new ArrayList<ArrayList<Calificacion>>();
        ArrayList<Calificacion> grupo = null;

        try {

            FileReader fr = new FileReader(file);
            BufferedReader bf = new BufferedReader(fr);

            while ((linea = bf.readLine()) != null) {

                //Procesamiento de cada linea del fichero
                campos = linea.split("::");
                try{
                idUser = Integer.parseInt(campos[0]);
                idMovie = Integer.parseInt(campos[1]);
                rating = Integer.parseInt(campos[2]);
                Calificacion calificacion = new Calificacion(idUser, rating, idMovie);
                if (grupo == null) {
                    grupo = new ArrayList<Calificacion>();
                }
                if (idUser != puntero) {
                    puntero = idUser;
                    ratings.add(grupo);
                    grupo = new ArrayList<Calificacion>();
                }
                grupo.add(calificacion);
                }catch(Exception ex)
                {
                    System.err.println("Error en linea:   "+linea);
                }
                
                
            }
            ratings.add(grupo);//agrego el ultimo grupo
            bf.close();

        } catch (IOException e) {
            System.out.println("UserDataReader.RatingsReadLines() Error: " + e.getMessage());
        }
        return ratings;
    }

    public static ArrayList<User> UserDataReadLines(String file) {

        String linea;
        int idUser;
        String sexo;
        int edad;
        int ocupacion;
        long tiempo;
        String campos[];
        ArrayList<User> usuarios = new ArrayList<User>();

        try {

            FileReader fr = new FileReader(file);
            BufferedReader bf = new BufferedReader(fr);

            while ((linea = bf.readLine()) != null) {
                //Procesamiento de cada linea del fichero

                campos = linea.split("::");
                idUser = Integer.parseInt(campos[0]);
                sexo = campos[1];
                edad = Integer.parseInt(campos[2]);
                ocupacion = Integer.parseInt(campos[3]);

                User user = new User(idUser, sexo, edad, ocupacion);
                usuarios.add(user);

            }
            bf.close();
        } catch (IOException e) {
            System.out.println("UserDataReader.RatingsReadLines() Error: " + e.getMessage());
        }
        return usuarios;
    }
    
    public static ArrayList<Estereotipo> leeEstereotipos(String file)
    {
        String linea;
        int idEstereotipo;
        String usuarios;
        
        String campos[];
        ArrayList<Estereotipo> estereotipos = new ArrayList<Estereotipo>();

        try {

            FileReader fr = new FileReader(file);
            BufferedReader bf = new BufferedReader(fr);

            while ((linea = bf.readLine()) != null) {
                //Procesamiento de cada linea del fichero

                campos = linea.split("::");
                idEstereotipo = Integer.parseInt(campos[0]);
                usuarios = campos[1];
                

                Estereotipo estereotipo = new Estereotipo(idEstereotipo, usuarios);
                estereotipos.add(estereotipo);

            }
            bf.close();
        } catch (IOException e) {
            System.out.println("UserDataReader.RatingsReadLines() Error: " + e.getMessage());
        }
        return estereotipos;
    
    }
    

}
